package br.com.duosoftware.orcamento.managedbeans;

import br.com.duosoftware.orcamento.daos.AlineaDAO;
import br.com.duosoftware.orcamento.daos.SublineaDAO;
import br.com.duosoftware.orcamento.entidades.Alinea;
import br.com.duosoftware.orcamento.entidades.Especie;
import br.com.duosoftware.orcamento.entidades.Sublinea;
import br.com.duosoftware.orcamento.utils.Mensagens;
import java.util.LinkedList;
import java.util.List;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.model.SelectItem;
import org.hibernate.exception.ConstraintViolationException;
import org.primefaces.context.RequestContext;

/**
 *
 * @author Daniel
 *
 */
@ManagedBean
@ViewScoped
public class SublineaBean {

    private Sublinea sublinea;
    private List<Sublinea> sublineas;
    private SublineaDAO sublineaDAO;
    //
    private List<SelectItem> alineas;

    public SublineaBean() {

        sublineaDAO = new SublineaDAO();

    }

    public Sublinea getSublinea() {
        return sublinea;
    }

    public void setSublinea(Sublinea sublinea) {
        this.sublinea = sublinea;
    }

    public List<Sublinea> getSublineas() {
        
        if(sublineas == null){
            
            sublineas = sublineaDAO.listarSublineas();
            
        }
        
        return sublineas;
    }

    public void setSublineas(List<Sublinea> sublineas) {
        this.sublineas = sublineas;
    }
    
    /**
     * <b>Método que inicializa a sublinea a ser cadastrado.</b><p>
     *
     * @return void
     *
     */
    public void adicionarInicio() {

        sublinea = new Sublinea();

    }

    /**
     * <b>Método que adiciona ou edita uma Sublinea</b><p>
     *
     * Após o término o método fecha o dialog de cadastro.
     * <p>
     *
     * @return void
     *
     */
    public void adicionarEditarFim() {

        sublineaDAO.salvarOuAtualizar(sublinea);
        sublinea = new Sublinea();
        sublineas = null;

        RequestContext requestContext = RequestContext.getCurrentInstance();
        requestContext.execute("dlgSublinea.hide()");
        requestContext.update("formSublineas:dtSublineas");

    }

    /**
     * <b>Método para iniciar o processo de edição de um Sublinea.</b>
     * <p>
     *
     * Ele verifica se há um Sublinea selecionada para edição, se não houver é
     * emitida uma mensagem pedindo que o usuário selecione uma.<p>
     *
     * Caso haja um Sublinea selecionado o médoto abre o dialog para edição<p>
     *
     * @return void
     *
     */
    public void editarInicio() {

        if (sublinea == null) {

            Mensagens.mensagemDeAlerta("Selecione um registro", "Selecione um re"
                    + "gistro para Editar");

        } else {

            RequestContext.getCurrentInstance().execute("dlgSublinea.show()");

        }

    }

    /**
     * <b>Método para iniciar o processo de exclusão de um Sublinea.</b>
     * <p>
     *
     * Ele verifica se há uma Sublinea selecionado para exclusão, se não houver é
     * emitida uma mensagem pedindo que o usuário selecione uma.<p>
     *
     * Caso haja um Sublinea selecionado o médoto abre um p:dialog para confirma
     * ção da exclusão.<p>
     *
     * @return void
     *
     */
    public void excluirInicio() {

        if (sublinea == null) {
            Mensagens.mensagemDeAlerta("Selecione um registro",
                    "Selecione um registro para excluir");
        } else {
            RequestContext.getCurrentInstance()
                    .execute("dlgExcluirSublinea.show()");
        }

    }

    /**
     * <b>Método para excluir um Sublinea.</b>
     * <p>
     *
     * Ele verifica se a Sublinea selecionado para exclusão está sendo utilizado
     * por alguma outra tabela do banco. Se estiver uma mensagem de aviso é dada
     * ao usuário<p>
     *
     * @return void
     *
     */
    public void excluirFim() {

        try {

            sublineaDAO.excluir(sublinea);
            sublinea = new Sublinea();
            sublineas = null;

        } catch (ConstraintViolationException e) {
            Mensagens.mensagemDeAlerta("Registro Utilizado",
                    "Esse registro está sendo utilizado");
        }

        RequestContext.getCurrentInstance()
                .execute("dlgExcluirSublinea.hide()");

    }

    /**
     * <b> Método para cancelar uma operação de cadastro ou edição.</b>
     * <p>
     *
     * O método instancia um novo objeto na variável Sublinea para limpar as
     * infomações.<p>
     *
     * @return void
     */
    public void cancelar() {

        sublinea = new Sublinea();

        RequestContext requestContext = RequestContext.getCurrentInstance();
        requestContext.execute("dlgSublinea.hide()");
        requestContext.update("formSublinea:dtSublineas");

    }

    //get's de Select Item's
    
    public List<SelectItem> getAlineas() {
        
        alineas = new LinkedList<SelectItem>();
        
        for(Alinea alinea : new AlineaDAO().listarAlineas()){
        
            alineas.add(new SelectItem(alinea, alinea.toString()));
            
        }
        
        return alineas;
        
    }

}
